package demo02;

import java.io.FileReader;
import java.io.IOException;

/*
 *  FileReader文件字符输入流：从文件读取字符的便捷类，使用方式与FileInputStream文件字节输入流相似
 * 
 *  FileReader的构造方法：
 *      FileReader(File file)：创建文件字符输入流，用于从指定的File对象读取字符
 *      FileReader(String fileName)：创建文件字符输入流，用于从路径字符串指定的文件读取字符
 * 
 *  FileReader的常用方法：
 *      public void close()：关闭文件字符输入流，释放资源
 *      public int read()：读取一个字符，提升为int类型并返回，读取到文件末尾会返回-1
 *      public int read(char[] cbuf)：读取一组字符，读取字符的数量取决于参数数组的大小，读取到的内容会存储到参数数组中，返回成功读取到的字符个数，没有读取到新内容则会返回-1
 * 
 *  文件字符输入流的使用步骤：
 *      1. 创建一个FileReader对象，构造方法中绑定要读取的数据源文件的路径
 *      2. 调用FileReader对象的方法read，读取文件
 *      3. 释放资源
 */
public class Demo01FileReader {
    public static void main(String[] args) throws IOException { // FileReader的方法抛出IOException -> 声明处理
        // 创建FileReader对象，传递待获取字符的文件路径
        FileReader fileReader = new FileReader("file\\c.txt"); // 由于系统编码识别问题（系统默认为GBK编码），该文件需要为gbk编码（以ANSI存储）

        // 获取单个字符
        System.out.println((char) fileReader.read()); // T

        // 获取多个字符
        int len = 0; // 存储有效字符个数
        char[] chars = new char[5]; // 存储接收到的多个字符
        /*
         *  1. 读取chars.length个有效字符，存储到chars字符数组
         *  2. 获取有效字符的个数len
         *  3. 判断len是否为-1
         *      len!=-1：成功读取到了一定数量的有效字符，len代表有效字符的个数，可用于将字符数组转换为字符串
         *      len==-1：没有读取到任何有效字符，len代表文件结束符，此时停止循环
         */
        while ((len = fileReader.read(chars)) != -1) {
            System.out.println(new String(chars, 0, len)); // 将字符数组转换为字符串并打印
        } // oasti e土仔

        // 释放资源
        fileReader.close();
    }
}
